/*
 * fuckit.c
 *
 * Created: 6/4/2013 5:49:50 PM
 *  Author: Crossfire
 */ 


unsigned char address;

#include <avr/io.h>

int main(void)
{
	Init();
    while(1)
    {
        Sendshit();
    }
}

///functie om de ontvangen data op te slaan en uiteindelijk te verzenden
void Sendshit()
{
	//verzend alle data
	TWI_Send(265, address);
}

///Functie om alles te initialiseren
void Init(void)
{
	
	DDRB = 0x80;
	//Master TWI init
	TWI_init_master();
}

///Functie om de master te initialiseren
void TWI_init_master(void)
{
	// Bit rate
	TWBR=0x01;
	//Zetten van prescalar bits
	TWSR=(0<<TWPS1)|(0<<TWPS0);
	// SCL freq= F_CPU/(16+2(TWBR).4^TWPS)
}

///Functie om Two Wired Interface te starten
void TWI_start(void)
{
	//TWI interrupt flag wissen, Start conditie instellen op SDA, Inschakelen van TWI
	TWCR= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
	//Wacht tot stat conditie is verzonden
	while(!(TWCR & (1<<TWINT)));
	//Controleer voor de bevestiging
	while((TWSR & 0xF8)!= 0x08);
}

///Functie om het slave andress te versturen
void TWI_write_address(unsigned char data)
{
	//Adress en schrijf instructie
	TWDR=data;
	//TWI interrupt flag wissen, TWI instellen
	TWCR=(1<<TWINT)|(1<<TWEN);
	//Wact tot complete TWDR byte is verstuurd
	while (!(TWCR & (1<<TWINT)));
	//Controleer voor de bevestiging
	while((TWSR & 0xF8)!= 0x18);
}

///Functie om te schrijven naar de slave
void TWI_write_data(unsigned char data)
{
	//Adress en schrijf instructie
	TWDR=data;	// put data in TWDR
	//TWI interrupt flag wissen, TWI instellen
	TWCR=(1<<TWINT)|(1<<TWEN);
	//Wacht tot complete TWDR byte is ontvangen
	while (!(TWCR & (1<<TWINT)));
	//Controleer voor de bevestiging
	while((TWSR & 0xF8) != 0x28);
}

///Functie voor het versturen van stop bit zodat het versturings process stopt
void TWI_stop(void)
{
	//TWI interrupt flag wissen, stop conditie instellen op SDA. TWI instellen
	TWCR= (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
	//Wacht tot stop conditie is verzonden
	while(!(TWCR & (1<<TWSTO)));  // Wait till stop condition is transmitted
}

///functie om een byte te verzenden naar een slave
void TWI_Send(uint8_t data, uint8_t address)
{
	TWI_start();
	TWI_write_address(address);
	TWI_write_data(data);
	TWI_stop();
}

